import { createApp } from 'vue'
import App from './App.vue'
// 引入router
import router from './router'
// 引入样式
import "@/assets/less/index.less"
// 引入ElementPlus
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import * as ElementPlusIconsVue from '@element-plus/icons-vue'
// 引入pinia
import {createPinia} from 'pinia'
const pinia = createPinia()
// 引入mock
import './api/mock'
// 引入api
import api from './api/api'
import { useAllDataStore } from './stores'


/* 路由守卫--全局守卫
    不在登录状态下，访问其他页面应该是重定向到login中
    在登录状态，访问不存在的页面应该定义到一个404页面 
*/
//这个方法判断要跳转的路由是否存在。getRoutes获得所有路由记录的完整列表。
function isRoute(to){
    return router.getRoutes().filter(item => item.path === to.path).length > 0
}
router.beforeEach((to, from) => {
    //如果要跳转的不是login,且token不存在(可以通过不存在token判断出用户未登录)
    if(to.path !== '/login'&&!store.state.token){
        // 跳转到login
        return { name: 'login' }
    }
    //如果路由记录不存在
    if(!isRoute(to)){
        // 跳转到404界面
        return { name: '404' }
    }
})

const app = createApp(App)
app.use(pinia)
app.config.globalProperties.$api = api
for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
    app.component(key, component)
}
const store = useAllDataStore()
store.addMenu(router, 'refresh')
app.use(router).use(ElementPlus).mount('#app')